package com.LeeCode;

/**
 * 只出现一次的数字 II
 */

public class Code137 {
    public static void main(String[] args) {
        int[] nums = {0, 1, 0, 1, 0, 1, 99};
        System.out.println(new Code137().singleNumber(nums));
    }

    public int singleNumber(int[] nums) {
        int result = 0;

        // 遍历每一位（32位整数）
        for (int i = 0; i < 32; i++) {
            int count = 0;  // 统计第 i 位上 1 的个数

            for (int num : nums) {
                if ((num & (1 << i)) != 0) {
                    count++;
                }
            }

            // 如果该位 1 的个数 % 3 == 1，说明答案的这一位是 1
            if (count % 3 == 1) {
                result |= (1 << i);
            }
        }

        return result;
    }
}
